/**
 * 
 */
package ec.gob.magap.era.dao.impl;

import java.math.BigDecimal;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import ec.gob.magap.era.dao.interfaces.CoordinadorDao;
import ec.gob.magap.era.entidades.Resultado;
import ec.gob.magap.era.entities.Usuario;
import ec.gob.magap.era.general.HibernateUtil;

/**
 * @author Javier
 *
 */
@SuppressWarnings("unchecked")
public class CoordinadorDaoImpl implements CoordinadorDao {

	/* (non-Javadoc)
	 * @see ec.gob.magap.era.dao.interfaces.CoordinadorDao#obtenerTodosUsuarios()
	 */
	
	@Override
	public List<Usuario> obtenerTodosUsuarios() throws HibernateException {
		List<Usuario> lista = null;
		try{
			Session session=HibernateUtil.getSessionFactory().openSession();

			session.beginTransaction();
			Query query = session.createQuery(consultaUsuarios(""));
	         
	        lista = query.list(); 
	            
			session.getTransaction().commit();
			
			return lista;
		}catch(HibernateException e){
			throw(e);
		}
	}

	private String consultaUsuarios(String  cadena) {
		
		String consulta = "from Usuario where estado = 'ACTIVO' " + cadena;
		
		return consulta;
	}
	/* (non-Javadoc)
	 * @see ec.gob.magap.era.dao.interfaces.CoordinadorDao#obtenerAdministradoresSistema()
	 */
	@Override
	public List<Usuario> obtenerAdministradoresSistema() throws HibernateException{
		List<Usuario> lista = null;
		try{
			Session session=HibernateUtil.getSessionFactory().openSession();
			
			session.beginTransaction();
			Query query = session.createQuery(consultaUsuarios(" and esadministradorsistema = 1"));
	         
	        lista = query.list(); 
	            
			session.getTransaction().commit();
			
			return lista;
		}catch(HibernateException e){
			throw(e);
		}
	}

	/* (non-Javadoc)
	 * @see ec.gob.magap.era.dao.interfaces.CoordinadorDao#obtenerAdministradoresZonales()
	 */
	@Override
	public List<Usuario> obtenerAdministradoresZonales() throws HibernateException{
		List<Usuario> lista = null;
		try{
			Session session=HibernateUtil.getSessionFactory().openSession();
			
			session.beginTransaction();
			Query query = session.createQuery(consultaUsuarios(" and esresponsablezonal = 1"));
	         
	        lista = query.list(); 
	            
			session.getTransaction().commit();
			
			return lista;
		}catch(HibernateException e){
			throw(e);
		}
	}

	/* (non-Javadoc)
	 * @see ec.gob.magap.era.dao.interfaces.CoordinadorDao#obtenerAdministradoresProvinciales()
	 */
	@Override
	public List<Usuario> obtenerAdministradoresProvinciales() throws HibernateException{
		List<Usuario> lista = null;
		try{
			Session session=HibernateUtil.getSessionFactory().openSession();
			
			session.beginTransaction();
			Query query = session.createQuery(consultaUsuarios(" and esresponsableprovincial = 1"));
	         
	        lista = query.list(); 
	            
			session.getTransaction().commit();
			
			return lista;
		}catch(HibernateException e){
			throw(e);
		}
	}

	/* (non-Javadoc)
	 * @see ec.gob.magap.era.dao.interfaces.CoordinadorDao#obtenerFacilitadores()
	 */
	@Override
	public List<Usuario> obtenerFacilitadores() throws HibernateException{
		List<Usuario> lista = null;
		try{
			Session session=HibernateUtil.getSessionFactory().openSession();
			
			session.beginTransaction();
			Query query = session.createQuery(consultaUsuarios(" and facilitaor = 1"));
	         
	        lista = query.list(); 
	            
			session.getTransaction().commit();
			
			return lista;
		}catch(HibernateException e){
			throw(e);
		}
	}

	/* (non-Javadoc)
	 * @see ec.gob.magap.era.dao.interfaces.CoordinadorDao#obtenerUsuarioporId(java.math.BigDecimal)
	 */
	@Override
	public Usuario obtenerUsuarioporId(BigDecimal idUsuario) throws HibernateException {
		Usuario usuario  = null;
		try{
			Session session=HibernateUtil.getSessionFactory().openSession();
			
			session.beginTransaction();
			Query query = session.createQuery(consultaUsuarios(" and id = :idUsuario"));
			query.setParameter("idUsuario", idUsuario);
	        usuario  =(Usuario) query.uniqueResult();
	            
			session.getTransaction().commit();
			
			return usuario;
		}catch(HibernateException e){
			throw(e);
		}
	}

	@Override
	public List<Usuario> obtenerAdministradoresNacionales() throws HibernateException{
		List<Usuario> lista = null;
		try{
			Session session=HibernateUtil.getSessionFactory().openSession();
			
			session.beginTransaction();
			Query query = session.createQuery(consultaUsuarios(" and esadministradornacional = 1"));
	         
	        lista = query.list(); 
	            
			session.getTransaction().commit();
			
			return lista;
		}catch(HibernateException e){
			throw(e);
		}
	}

	@Override
	public Resultado guardarUsuario(Usuario usuario, String operacion)
			throws HibernateException {
		// TODO Auto-generated method stub
		return null;
	}

}
